﻿// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using Admin.NET.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Admin.NET.Core;
/// <summary>
/// 消息通知表
/// </summary>
[SugarTable(null, "消息通知表")]
[SugarIndex("index_{table}_B", nameof(PurchaseId), OrderByType.Asc)]
public partial class AppNotification : EntityTenant
{
    /// <summary>
    /// 接收用户ID
    /// </summary>
    [SugarColumn(ColumnDescription = "接收用户ID")]
    public long ReceiverId { get; set; }

    /// <summary>
    /// 发送用户ID（可为系统消息）
    /// </summary>
    [SugarColumn(ColumnDescription = "发送用户ID", IsNullable = true)]
    public long? SenderId { get; set; }

    /// <summary>
    /// 关联的求购ID
    /// </summary>
    [SugarColumn(ColumnDescription = "关联的求购ID", IsNullable = true)]
    public long? PurchaseId { get; set; }

    /// <summary>
    /// 关联的竞拍ID
    /// </summary>
    [SugarColumn(ColumnDescription = "关联的竞拍ID", IsNullable = true)]
    public long? BidId { get; set; }

    /// <summary>
    /// 关联的卖车ID
    /// </summary>
    [SugarColumn(ColumnDescription = "关联的卖车ID", IsNullable = true)]
    public long? InfoId { get; set; }

    /// <summary>
    /// 消息类型
    /// </summary>
    [SugarColumn(ColumnDescription = "消息类型")]
    public NotificationTypeEnum Type { get; set; }

    /// <summary>
    /// 消息标题
    /// </summary>
    [SugarColumn(ColumnDescription = "消息标题", Length = 100)]
    public string Title { get; set; }

    /// <summary>
    /// 消息内容
    /// </summary>
    [SugarColumn(ColumnDescription = "消息内容", Length = 500)]
    public string? Content { get; set; }

    /// <summary>
    /// 是否已读
    /// </summary>
    [SugarColumn(ColumnDescription = "是否已读")]
    public bool IsRead { get; set; } = false;

    /// <summary>
    /// 阅读时间
    /// </summary>
    [SugarColumn(ColumnDescription = "阅读时间", IsNullable = true)]
    public DateTime? ReadTime { get; set; }


    /// <summary>
    /// 关联接收用户
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(ReceiverId))]
    public SysUser Receiver { get; set; }

    /// <summary>
    /// 关联发送用户
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(SenderId))]
    public SysUser Sender { get; set; }

    /// <summary>
    /// 关联求购信息
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(PurchaseId))]
    public AppVehiclePurchase Purchase { get; set; }

    /// <summary>
    /// 关联竞拍信息
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(BidId))]
    public AppVehicleBid Bid { get; set; }
}